home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earkit / news / thor / rexx / bbsread / autoreply.br < prev    next >
Text File  |  1998-05-24  |  6KB  |  181 lines

  1. /*
  2. $VER: AutoReply.br 1.2 (21.08.97)
  3. (c)  Neil Bothwick <neil@wirenet.co.uk> 1997
  4. */
  5.  
  6. /* A Thor script to generate an event in reply to  */
  7. /* an email. It should be called from SortMail3 or */
  8. /* Thor 2.5's internal mail sorting                */
  9.  
  10. Version = subword(sourceline(2),3,1)
  11. UrlStr  = 'ftp://ftp.aminet.org/pub/aminet/comm/thor/AutoReplyThor.lha'
  12.  
  13. Usage = 'Usage: AutoReply.br Config MessageNo'
  14. options results
  15.  
  16. /* ;;;Strip "'s from arg string and parse into variables */
  17. drop Config.
  18. parse arg CmdLine
  19. CmdLine = compress(CmdLine,'"')
  20. parse var CmdLine Config.Name MsgNum
  21. if Config.Name = '?' | MsgNum = '' then call ExitMsg(Usage)
  22. ;;;
  23. /* ;;;Load bbsread.library if necessary */
  24. if ~show('p', 'BBSREAD') then do
  25.     address command
  26.     'run >nil: `GetEnv THOR/THORPath`bin/LoadBBSRead'
  27.     'WaitForPort BBSREAD'
  28.     end
  29. ;;;
  30. /* ;;;Open config file and find matching config entry */
  31. if ~open(cfgfile,'ENV:Thor/AutoReply.cfg','r') then call ExitMsg('Failed to open configuration file')
  32. do until eof(cfgfile) | ConfigFound = 'TRUE'
  33.     nextline = readln(cfgfile)
  34.     parse var nextline CfgName CfgVal .
  35.     CfgVal = compress(CfgVal,'"')
  36.     if upper(CfgName) = 'CONFIG' & upper(CfgVal) = upper(Config.Name) then ConfigFound = 'TRUE'
  37.     end
  38.  
  39. if eof(cfgfile) then call ExitMsg('Configuration entry for' Config.Name 'not found')
  40. ;;;
  41. /* ;;;Read configuration details */
  42. n = 0
  43. do until eof(cfgfile)
  44.     nextline = readln(cfgfile)
  45.     parse var nextline CfgName '"' CfgVal '"' .
  46.     CfgVal = compress(CfgVal,'"')
  47.     if upper(CfgName) = 'ENDCONFIG' then leave
  48.     n = n+1
  49.     Config.n.Name = upper(CfgName)
  50.     Config.n.Val  = CfgVal
  51.     end
  52.  
  53. Config.Count = n
  54.  
  55. do i = 1 to Config.Count
  56.     select
  57.         when Config.i.Name = 'SYSTEM'     then Config.System   = Config.i.Val
  58.         when Config.i.Name = 'CONFERENCE' then Config.MailConf = Config.i.Val
  59.         when Config.i.Name = 'SUBJECT'    then Config.Subject  = Config.i.Val
  60.         when Config.i.Name = 'QUOTEMSG'   then Config.QuoteMsg = Config.i.Val
  61.         when Config.i.Name = 'QUOTESTR'   then Config.QuoteStr = Config.i.Val
  62.         when Config.i.Name = 'SIGFILE'    then Config.SigFile  = Config.i.Val
  63.         when Config.i.Name = 'HEADFILE'   then Config.HeadFile = Config.i.Val
  64.         when Config.i.Name = 'TEXTFILE'   then Config.TextFile = Config.i.Val
  65.         when Config.i.Name = 'FOOTFILE'   then Config.FootFile = Config.i.Val
  66.         otherwise call ExitMsg('Configuration file error')
  67.         end
  68.     end
  69.  
  70. if symbol('Config.System')    ~= 'VAR' then call ExitMsg('System name not defined in config')
  71. if symbol('Config.MailConf')  ~= 'VAR' then call ExitMsg('Mail conference not defined in config')
  72. if symbol('Config.TextFile')  ~= 'VAR' then call ExitMsg('Reply text not defined in config')
  73. if symbol('Config.QuoteStr') ~= 'VAR' then Config.QuoteStr = ''
  74. ;;;
  75. /* ;;;Read incoming message */
  76. address BBSREAD
  77. drop MsgBody. MsgHead.
  78. READBRMESSAGE bbsname '"'Config.System'"' confname '"'Config.MailConf'"' msgnr MsgNum textstem MsgBody headstem MsgHead
  79. if RC > 0 then callExitMsg(BBSREAD.LASTERROR)
  80. ;;;
  81. /* ;;;Create message file for reply */
  82. UNIQUEMSGFILE bbsname '"'Config.System'"' stem MsgFile
  83. if ~open(out,MsgFile.NAME,'w') then call ExitMsg('Unable to create message file')
  84. ;;;
  85. /* ;;;Write headers */
  86. headline = 'X-Generator:' VerStr
  87. call writeln(out,headline)
  88. headline = 'X-URL:' UrlStr
  89. call writeln(out,headline)
  90. if symbol('Config.HeadFile') = 'VAR' '' & exists(Config.HeadFile) then do
  91.     if ~open(headers,Config.HeadFile,'R') then call ExitMsg('Unable to open specified header file')
  92.     do until eof(headers)
  93.         headline = readln(headers)
  94.         call writeln(out,headline)
  95.         end
  96.     call close(headers)
  97.     end
  98. if headline > '' then call writeln(out,'')
  99. ;;;
  100. /* ;;;Quote original message above reply */
  101. if upper(Config.QuoteMsg) = 'ABOVE' then do
  102. do i = 1 to MsgBody.TEXT.COUNT
  103.     if length(MsgBody.TEXT.i) > 0 then call writeln(out,Config.QuoteStr||MsgBody.TEXT.i)
  104.     else call writeln(out,'')
  105.     end
  106. end
  107. ;;;
  108. /* ;;;Write reply */
  109. if ~open(reply,Config.TextFile) then call ExitMsg('Unable to open reply text file')
  110. do until eof(reply)
  111.     call writeln(out,readln(reply))
  112.     end
  113. call close(reply)
  114. ;;;
  115. /* ;;;Quote original message below reply */
  116. if upper(Config.QuoteMsg) = 'BELOW' then do i = 1 to MsgBody.TEXT.COUNT
  117.     if length(MsgBody.TEXT.i) > 0 then call writeln(out,Config.QuoteStr||MsgBody.TEXT.i)
  118.     else call writeln(out,'')
  119.     end
  120. ;;;
  121. /* ;;;Add signature */
  122. if symbol('Config.SigFile') = 'VAR' '' & exists(Config.SigFile) then do
  123.     if ~open(sig,Config.SigFile,'R') then call ExitMsg('Unable to open signature file')
  124.     do until eof(sig)
  125.         sigline = readln(sig)
  126.         call writeln(out,sigline)
  127.         end
  128.     call close(sig)
  129.     end
  130. ;;;
  131. /* ;;;Add footer file */
  132. if symbol('Config.FootFile') = 'VAR' '' & exists(Config.FootFile) then do
  133.     if ~open(foot,Config.FootFile,'R') then call ExitMsg('Unable to open footer file')
  134.     do until eof(foot)
  135.         footline = readln(foot)
  136.         call writeln(out,footline)
  137.         end
  138.     call close(foot)
  139.     end
  140. ;;;
  141. call close(out)
  142.  
  143. /* ;;;Create subject line */
  144. ReplySubject = MsgHead.SUBJECT
  145. select
  146.     when symbol('Config.Subject') ~= 'VAR' then do
  147.         if left(upper(ReplySubject),3) ~= 'RE:' then ReplySubject = 'Re:' ReplySubject
  148.         end
  149.     when pos('%S',upper(Config.Subject)) = 0 then ReplySubject = Config.Subject
  150.     otherwise do
  151.         InsertPos = pos('%S',upper(Config.Subject))
  152.         ReplySubject = left(Config.Subject,InsertPos-1)||ReplySubject||substr(Config.Subject,InsertPos+2)
  153.         end
  154.     end
  155. ;;;
  156. /* ;;;Create EMail reply event */
  157. drop EventData.
  158. EventData.TOADDR     = MsgHead.FROMADDR
  159. EventData.SUBJECT    = ReplySubject
  160. EventData.CONFERENCE = Config.MailConf
  161. EventData.MSGFILE    = MsgFile.FILEPART
  162. if symbol('MsgHead.FROMNAME') = 'VAR' then EventData.TONAME = MsgHead.FROMNAME
  163.  
  164. WRITEBREVENT bbsname '"'Config.System'"' event 0 stem EventData
  165. if RC > 0 then call ExitMsg(BBSREAD.LASTERROR)
  166. ;;;
  167. exit
  168.  
  169.  
  170. /* ;;;Exit with a message */
  171. ExitMsg:
  172.     parse arg msgstr
  173.     address command
  174.     if symbol('MsgFile.NAME') = 'VAR' then do
  175.         call close(out)
  176.         'delete >NIL:' MsgFile.NAME
  177.         end
  178.     'RequestChoice >NIL: "AutoReply.br" "'msgstr'" "Bother"'
  179.     exit
  180. ;;;
  181.